Function DECIMAL2RGB(ColorVal) As Variant ' Converts a color value to an RGB triplet ' Returns a 3-element variant array With Application DECIMAL2RGB = .Bitand(.Bitrshift(ColorVal, Array(0, 8, 16)), &HFF) End With End Function
Function DECIMAL2RGB(ColorVal) As Variant ' Converts a color value to an RGB triplet ' Returns a 3-element variant array With Application DECIMAL2RGB = .Bitand(.Bitrshift(ColorVal, Array(0, 8, 16)), &HFF) End With End Function
Sub colorize() Dim p As Paragraph, prev&, b As Boolean Application.ScreenUpdating = 0 With CreateObject("vbscript.regexp") .Global = False: .Pattern = "^\d+\.\d+\s" For Each p In ThisDocument.Paragraphs If .test(p.Range.Text) Then If prev > 0 Then p.Parent.Range(prev - 1, p.Previous.Range.End).HighlightColorIndex = IIf(b, 3, 7) End If prev = p.Range.Start + 1 b = Not b ElseIf p.Next Is Nothing Then p.Parent.Range(prev - 1, p.Range.End).HighlightColorIndex = IIf(b, 3, 7) End If Next End With Application.ScreenUpdating = 1 End Sub
[/vba]
Здравствуйте. [vba]
Код
Sub colorize() Dim p As Paragraph, prev&, b As Boolean Application.ScreenUpdating = 0 With CreateObject("vbscript.regexp") .Global = False: .Pattern = "^\d+\.\d+\s" For Each p In ThisDocument.Paragraphs If .test(p.Range.Text) Then If prev > 0 Then p.Parent.Range(prev - 1, p.Previous.Range.End).HighlightColorIndex = IIf(b, 3, 7) End If prev = p.Range.Start + 1 b = Not b ElseIf p.Next Is Nothing Then p.Parent.Range(prev - 1, p.Range.End).HighlightColorIndex = IIf(b, 3, 7) End If Next End With Application.ScreenUpdating = 1 End Sub
Шестнадцатеричное представление числа 255, по совместительству RGB(255,0,0), vbRed t330, в VB цвет в шестнадцатеричном представлении кодируется в виде &Hbbggrr, в HTML в виде #rrggbb
в формуле вместо Y стоит массив Array (0,8,16) а не число... Это как?
в коде я использовал вызов функции листа БИТ.СДВИГП и БИТ.И (Bitrshift и Bitand соответсвенно), только забыл указать, что работает только начиная с Excel 2013. Вызов функций листа в vba в контексте Application позволяет предоставлять им массивы в качестве аргументов (в отличие от вызова в контексте WorksheetFunction).
t330, в VB цвет в шестнадцатеричном представлении кодируется в виде &Hbbggrr, в HTML в виде #rrggbb
Шестнадцатеричное представление числа 255, по совместительству RGB(255,0,0), vbRed t330, в VB цвет в шестнадцатеричном представлении кодируется в виде &Hbbggrr, в HTML в виде #rrggbb
в формуле вместо Y стоит массив Array (0,8,16) а не число... Это как?
в коде я использовал вызов функции листа БИТ.СДВИГП и БИТ.И (Bitrshift и Bitand соответсвенно), только забыл указать, что работает только начиная с Excel 2013. Вызов функций листа в vba в контексте Application позволяет предоставлять им массивы в качестве аргументов (в отличие от вызова в контексте WorksheetFunction).krosav4ig
serg1981, а не кажется ли вам, что вы должны были это написать в своем первом посте? вместо того, чтобы писать код, которы вообще нафиг не упал... или вы считаете, что тут телепаты собрались и должны угадывать?
шлем по dde 2 команды [vba]
Код
'[select.special(11)]' '[select(, "RC1")]'
[/vba]
или пользуем Worksheet_Calculate, ибо Worksheet_Change не работает с DDE [vba]
Код
Private Sub Worksheet_Calculate() Worksheets(Me.Name).UsedRange Me.Cells.SpecialCells(11).EntireRow.Cells(, "A").Select End Sub
serg1981, а не кажется ли вам, что вы должны были это написать в своем первом посте? вместо того, чтобы писать код, которы вообще нафиг не упал... или вы считаете, что тут телепаты собрались и должны угадывать?
шлем по dde 2 команды [vba]
Код
'[select.special(11)]' '[select(, "RC1")]'
[/vba]
или пользуем Worksheet_Calculate, ибо Worksheet_Change не работает с DDE [vba]
Код
Private Sub Worksheet_Calculate() Worksheets(Me.Name).UsedRange Me.Cells.SpecialCells(11).EntireRow.Cells(, "A").Select End Sub
Sub drawCircles() Dim pCircle As Shape Dim pPoly As Shape Dim pNodes As ShapeNodes Dim pSheet As Worksheet Dim kNode As Long, xOff As Double, yOff As Double Dim dX As Double, dY As Double, pointDist As Double Dim Xc As Double, Yc As Double, curDist As Double Set pSheet = ActiveSheet Set pPoly = pSheet.Shapes("Полилиния 2") Set pCircle = pSheet.Shapes("Овал 16") xOff = -0.5 * pCircle.Width yOff = -0.5 * pCircle.Height curDist = 0# Set pNodes = pPoly.Nodes For kNode = 1 To pNodes.Count - 1 dX = pNodes(kNode + 1).Points(1, 1) - pNodes(kNode).Points(1, 1) dY = pNodes(kNode + 1).Points(1, 2) - pNodes(kNode).Points(1, 2) pointDist = Math.Sqr(dX ^ 2 + dY ^ 2) dX = dX / pointDist dY = dY / pointDist Do Until curDist > pointDist Xc = pNodes(kNode).Points(1, 1) + curDist * dX + xOff Yc = pNodes(kNode).Points(1, 2) + curDist * dY + yOff 'pSheet.Shapes.AddShape msoShapeOval, Xc, Yc, pCircle.Width, pCircle.Height With [Овал 16].Duplicate .Top = Yc .Left = Xc End With curDist = curDist + 50 Loop curDist = curDist - pointDist Next End Sub
[/vba]
Доброго. Какой-то у вас овал квадратный [vba]
Код
Sub drawCircles() Dim pCircle As Shape Dim pPoly As Shape Dim pNodes As ShapeNodes Dim pSheet As Worksheet Dim kNode As Long, xOff As Double, yOff As Double Dim dX As Double, dY As Double, pointDist As Double Dim Xc As Double, Yc As Double, curDist As Double Set pSheet = ActiveSheet Set pPoly = pSheet.Shapes("Полилиния 2") Set pCircle = pSheet.Shapes("Овал 16") xOff = -0.5 * pCircle.Width yOff = -0.5 * pCircle.Height curDist = 0# Set pNodes = pPoly.Nodes For kNode = 1 To pNodes.Count - 1 dX = pNodes(kNode + 1).Points(1, 1) - pNodes(kNode).Points(1, 1) dY = pNodes(kNode + 1).Points(1, 2) - pNodes(kNode).Points(1, 2) pointDist = Math.Sqr(dX ^ 2 + dY ^ 2) dX = dX / pointDist dY = dY / pointDist Do Until curDist > pointDist Xc = pNodes(kNode).Points(1, 1) + curDist * dX + xOff Yc = pNodes(kNode).Points(1, 2) + curDist * dY + yOff 'pSheet.Shapes.AddShape msoShapeOval, Xc, Yc, pCircle.Width, pCircle.Height With [Овал 16].Duplicate .Top = Yc .Left = Xc End With curDist = curDist + 50 Loop curDist = curDist - pointDist Next End Sub
Процесс запущен, окна еще нет, отсюда и ошибка, тут или, как предложила Елена, делать delay, или пользовать winapi , например EnumWindows + GetWindowThreadProcessId + IsWindowVisible А Appactivate в качестве первого аргумента принимает имя окна или идентификатор процесса
Процесс запущен, окна еще нет, отсюда и ошибка, тут или, как предложила Елена, делать delay, или пользовать winapi , например EnumWindows + GetWindowThreadProcessId + IsWindowVisible А Appactivate в качестве первого аргумента принимает имя окна или идентификатор процессаkrosav4ig