Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA宏在运行后不执行任何操作,不提供任何错误(macos)_Excel_Vba_Macos - Fatal编程技术网

Excel VBA宏在运行后不执行任何操作,不提供任何错误(macos)

Excel VBA宏在运行后不执行任何操作,不提供任何错误(macos),excel,vba,macos,Excel,Vba,Macos,这是我在这个平台上的第一个问题,所以请原谅我可能犯的任何错误。 我有两本excel工作簿,我想对所有这些工作簿中的精确工作表和精确单元格进行多次精确更改,但它们太多了,无法单独完成。 我使用其中一本工作簿记录了要在宏中进行的所有更改 Sub Macro1() Range("W4:X4").Select ActiveCell.FormulaR1C1 = "OFF -PEAK GEM(MW)" Range("J33:M33").Select ActiveCell.FormulaR1C1 = "Hz

这是我在这个平台上的第一个问题,所以请原谅我可能犯的任何错误。 我有两本excel工作簿,我想对所有这些工作簿中的精确工作表和精确单元格进行多次精确更改,但它们太多了,无法单独完成。 我使用其中一本工作簿记录了要在宏中进行的所有更改

Sub Macro1()

Range("W4:X4").Select
ActiveCell.FormulaR1C1 = "OFF -PEAK GEM(MW)"
Range("J33:M33").Select
ActiveCell.FormulaR1C1 = "Hz"
Range("B33:I33").Select
ActiveCell.FormulaR1C1 = "DETAILS"
Range("R34:X34").Select
Selection.EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove
Range("R35:X35").Select
Selection.Cut
Range("R34").Select
ActiveSheet.Paste
Range("K68:L123").Select
Selection.Delete Shift:=xlToLeft
Range("K68:L68").Select
ActiveCell.FormulaR1C1 = "UNITS ON BAR"
Range("V178").Select
ActiveCell.FormulaR1C1 = "EXPECTED RESERVE"
Range("V179:V182").Select

End Sub
我在另一个未修改的工作簿中运行了这个宏,它工作得非常好。 我对使用VBA很陌生,但我能在网上找到一段代码,在指定目录中的多个excel文件中进行更改

Sub ChangeFiles()
Dim MyPath As String
Dim MyFile As String
Dim dirName As String
Dim wks As Worksheet

' Change directory path as desired
dirName = "c:\myfiles\"

MyPath = dirName & "*.xlsx"
MyFile = Dir(MyPath)
If MyFile > "" Then MyFile = dirName & MyFile

Do While MyFile <> ""
    If Len(MyFile) = 0 Then Exit Do 

    Workbooks.Open MyFile

    With ActiveWorkbook
        For Each wks In .Worksheets
            ' Specify the change to make
            wks.Range("A1").Value = "A1 Changed"
        Next
    End With

    ActiveWorkbook.Close SaveChanges:=True

    MyFile = Dir
    If MyFile > "" Then MyFile = dirName & MyFile
Loop
End Sub 
子变更文件()
将MyPath设置为字符串
将MyFile设置为字符串
名称为字符串
将工作作为工作表
'根据需要更改目录路径
dirName=“c:\myfiles\”
MyPath=dirName&“*.xlsx”
MyFile=Dir(MyPath)
如果MyFile>“”则MyFile=dirName&MyFile
当我的文件“”时执行此操作
如果Len(MyFile)=0,则退出Do
工作簿。打开我的文件
使用ActiveWorkbook
工作表中的每项工作
'指定要进行的更改
wks.Range(“A1”).Value=“A1已更改”
下一个
以
ActiveWorkbook.Close SaveChanges:=True
MyFile=Dir
如果MyFile>“”则MyFile=dirName&MyFile
环
端接头
我编辑它来满足我的需要,就像这样

Sub ChangeFiles()
Dim MyPath As String
Dim MyFile As String
Dim dirName As String
Dim wks As Worksheet
Set wks = ActiveWorkbook.Worksheets("SHEET X")

' Change directory path as desired
dirName = "/Users/Account/Desktop/Directory 1/Directory 2/"

MyPath = dirName & "*.xls"
MyFile = Dir(MyPath)
If MyFile > "" Then MyFile = dirName & MyFile

Do While MyFile <> ""
    If Len(MyFile) = 0 Then Exit Do

    Workbooks.Open MyFile

    With ActiveWorkbook
        For Each wks In ActiveWorkbook.Worksheets
            ' Specify the change to make
            wks.Range("W4:X4").Select
            ActiveCell.FormulaR1C1 = "OFF -PEAK GEM(MW)"
            wks.Range("J33:M33").Select
            ActiveCell.FormulaR1C1 = "Hz"
            wks.Range("B33:I33").Select
            ActiveCell.FormulaR1C1 = "DETAILS"
            wks.Range("R34:X34").Select
            Selection.EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove
            wks.Range("R35:X35").Select
            Selection.Cut
            wks.Range("R34").Select
            ActiveSheet.Paste
            wks.Range("K68:L123").Select
            Selection.Delete Shift:=xlToLeft
            wks.Range("K68:L68").Select
            ActiveCell.FormulaR1C1 = "UNITS ON BAR"
            wks.Range("V178").Select
            ActiveCell.FormulaR1C1 = "EXPECTED RESERVE"
            wks.Range("V179:V182").Select
        Next
    End With

    ActiveWorkbook.Close SaveChanges:=True

    MyFile = Dir
    If MyFile > "" Then MyFile = dirName & MyFile
Loop
End Sub
子变更文件()
将MyPath设置为字符串
将MyFile设置为字符串
名称为字符串
将工作作为工作表
设置wks=ActiveWorkbook.工作表(“工作表X”)
'根据需要更改目录路径
dirName=“/Users/Account/Desktop/Directory 1/Directory 2/”
MyPath=dirName&“*.xls”
MyFile=Dir(MyPath)
如果MyFile>“”则MyFile=dirName&MyFile
当我的文件“”时执行此操作
如果Len(MyFile)=0,则退出Do
工作簿。打开我的文件
使用ActiveWorkbook
对于Active工作簿中的每个工作。工作表
'指定要进行的更改
wks.Range(“W4:X4”)。选择
ActiveCell.FormulaR1C1=“非峰值GEM(MW)”
wks.Range(“J33:M33”)。选择
ActiveCell.FormulaR1C1=“Hz”
wks.Range(“B33:I33”)。选择
ActiveCell.FormulaR1C1=“详细信息”
wks.Range(“R34:X34”)。选择
Selection.EntireRow.Insert,CopyOrigin:=xlFormatFromLeftOrAbove
wks.Range(“R35:X35”)。选择
选择,剪
wks.Range(“R34”)。选择
活动表。粘贴
wks.Range(“K68:L123”)。选择
选择。删除移位:=xlToLeft
wks.Range(“K68:L68”)。选择
ActiveCell.FormulaR1C1=“条形图上的单位”
wks.Range(“V178”)。选择
ActiveCell.FormulaR1C1=“预期储备”
wks.Range(“V179:V182”)。选择
下一个
以
ActiveWorkbook.Close SaveChanges:=True
MyFile=Dir
如果MyFile>“”则MyFile=dirName&MyFile
环
端接头
我运行了它,它什么也没做,也没有返回错误。我在这里真是束手无策,我真的非常感谢任何帮助。
P.S我是mac用户

注意:这不是解决方案,将被删除。只是想给OP提个建议

您应该按如下方式更新excel操作。
将显示
方法的替代方法。选择
方法

With wks
    .Range("W4:X4") = "OFF -PEAK GEM(MW)"
    .Range("J33:M33") = "Hz"
    .Range("B33:I33") = "DETAILS"
    .Range("R34:X34").Insert , CopyOrigin:=xlFormatFromLeftOrAbove
    .Range("R35:X35").Copy
    .Range("R35:x35").ClearContents
    .Range("R34").PasteSpecial
    .Range("K68:L123").Delete Shift:=xlToLeft
    .Range("K68:L68") = "UNITS ON BAR"
    .Range("V178") = "EXPECTED RESERVE"
End With

好的,120个同时打开的标签(不开玩笑,我用F8数了一下代码,看看它在哪里停止了你期望它做的事情。另外,你应该避免使用“.Select方法”。我会努力将选择项取出,但你也应该一步一步地完成代码。它至少打开了预期的工作簿吗?▲ 这是一个很好的建议。Chip Pearson提供了更多有关单步执行代码以及其他VBA调试技术的信息。我单步执行了代码(显然在mac上是shift+mac+I),代码从sub到set到dirName到MyPath到MyFile再到If MyFile再到End sub(它应该这样做吗?)我不知道.Select方法是不可接受的,我只是记录了宏,我一定是在界面中选择了单元格,不,它没有打开工作簿,它什么都不做。你将不得不研究Dir在mac上的使用。也许从你开始,你应该在最后添加
debug.print
用于所有变量的宏,如
MyPath
MyString
@Jeeped