从我个人的WBA运行VBA是完美的,复制到一个发行版,并打破。 为什么?

我在我的个人书中有一个macros中的代码,它完美的工作。

我试图把它复制到它正在运行的实际的wb中,所以我可以将它发送给其他人使用,并且在评论行“XXXXXX”处打破。 所选的wb正在打开,但是没有任何后续的编辑出现在那本书中。 所有下面的代码(删除列等)应该发生在打开的工作簿只发生在运行macros的wb,这是…次优。

我不知道为什么! 任何想法的欢迎。

谢谢

山姆

Sub PredictBoxValue() Dim wb As Workbook Dim myPath As String Dim myFile As String Dim myExtension As String Dim FldrPicker As FileDialog Dim TitleName As String Dim sas As String Dim sos As String Dim unusedRow As Long Dim filename As String 'Optimize Macro Speed Application.ScreenUpdating = False 'Application.EnableEvents = False 'Application.Calculation = xlCalculationManual 'Retrieve Target Folder Path From User sos = ActiveWorkbook.Name ActiveSheet.Range("B11", "AF11").Clear Dim fNameAndPath As Variant fNameAndPath = Application.GetOpenFilename(FileFilter:="Excel Files (*.XLS), *.XLS", Title:="Select File To Be Opened") If fNameAndPath = False Then Exit Sub Set wb = Workbooks.Open(fNameAndPath) sas = ActiveWorkbook.Name 'Delete extraneous columns and rows 'XXXXXXXXXXX TitleName = Cells(5, 2).Value Columns(8).Delete Columns(12).Delete Columns(12).Delete Columns(3).Delete Columns(2).Delete Columns(1).Delete Rows(3).Delete Rows(2).Delete Rows(1).Delete Here: Do Until Cells(2, 1).Value = "1" Range("A1").End(xlDown).Select 'Do Until ActiveCell.Value = "1" 'ActiveCell.Offset(1).Select 'Loop Do While ActiveCell.Value < 1 ActiveCell.EntireRow.Delete ActiveCell.Offset(-1, 0).Select Loop ActiveCell.Offset(-1, 1).Select Do While ActiveCell.Offset(0, -1).Value > 30 ActiveCell.EntireRow.Delete GoTo Here Loop ActiveCell.Resize(, 7).Cut ActiveCell.Offset(1, 0).End(xlToRight).Offset(0, 1) ActiveCell.EntireRow.Delete Loop Rows(1).EntireRow.Delete Cells(1, 1) = TitleName Range("A1", Range("A1").End(xlToRight)).Copy Windows(sos).Activate ActiveSheet.Cells(11, 2).PasteSpecial (xlPasteValues) Application.CutCopyMode = False Windows(sas).Activate 'Save and Close Workbook wb.Close SaveChanges:=False Windows(sos).Activate ActiveSheet.Cells(5, 3).Select 'Message Box when tasks are completed MsgBox ("Data uploaded for ") & Range("B11") ResetSettings: 'Reset Macro Optimization Settings Application.EnableEvents = True Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True End Sub 

我仔细看了一下你的代码。 我想你是说你想从macros.xlsm (或类似的东西)运行代码,并让它在mydata.xlsx (或其他)上运行。 因此,在你的macros中, ThisWorkbook会引用macros.xlsm (你需要引用它)。

完成之后Set wb = Workbooks.Open(fNameAndPath)打开mydata.xlsx ,并且在讨论mydata.xlsx时始终引用wbwb.Sheets("whatever")

  • 不要在前面没有表单参考的情况下使用ColumnsRowsSheetsCells
  • 根本不要使用ActiveWorkbook / ActiveWorksheet
  • 而不是ActiveCell ,使用命名的范围,例如,在这个 问题BruceWayne指出的 答案 。

这应该照顾它!

<soapbox>一般来说,请小心你的缩进,并使用更长的variables名 – 当你处理这段代码时,两者都可以帮助你避免错误。 </soapbox>