Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Macro VBA giving error when running on different server Hi, I have a macro file

ID: 3561323 • Letter: M

Question

Macro VBA giving error when running on different server

Hi,

I have a macro file running in Excel 2010 Standard.

The Macro (.xlsm) works perfectly in one server. When it runs on another server, it giving error on the correct codes sometimes.

'Microsoft excel cannot paste the data'.

The Macro seems unstable. It will success when I close and open and maybe run a few more times.

I have checked the version of .Net Framework. Both are using the same version 4.0.30319.

Anything I can do to get it success?

Explanation / Answer

*I think I8've caught most o9f it. Y&ou will notice that when I am writing a cell or range reference inside of an With ... End With statement, I prefix Range with a period like .Range. This means that the range definitely belongs to what is defined as the With. Example:

With wkbk.Sheets("Sheets1")

    .Range("A1")   'refers to A1 on Sheet1 within wrkbk

End With

With wkbk.Sheets("Sheets1")

    Range("A1")   'refers to some A1, could be on Sheet1 or somewhere else

End With

You still had a lot of missing worksheet references. Even if you use .Activate to access a workbook, it isn't a good idea to rely on some worksheet being the one with the focus without defining it explicitly.

I don't know what you mean by "paste values and descriptions". What are descriptions? Comments? Formats?


Private Sub Workbook_Open()
    Dim wkbk As Workbook, wkbk2 As Workbook, wkbk3 As Workbook
    Dim pvtTable1 As PivotTable
    Dim strYrNm As String
    Dim strMthNm As String
    Dim i As Range, src As Range, QueryRange As Range
    Dim X As Long
    Dim BankingName As String, BankingCode As Long
   
    Application.DisplayAlerts = False
   
    Set wkbk = Workbooks.Open("D:Customer.xlsx", False)
    Set wkbk3 = Workbooks.Open("D:INST.xlsx", False)
    Set QueryRange = wkbk3.Sheets("Sheet1").Range("A1:B500")

    For Each i In wkbk.Sheets("Sheet1").Range("B:AB,AD:AS,AU:BF").Columns
   
        With wkbk.Sheets("Sheet1") ' sheet1 assumed, not in your code
            If Not Intersect(i, .Range("B:AB")) Is Nothing Then
                Set src = Union(.Columns("A"), i, .Columns("AC"), .Columns("BH"))
            ElseIf Not Intersect(i, .Range("AD:AS")) Is Nothing Then
                Set src = Union(.Columns("A"), i, .Columns("AT"), .Columns("BH"))
            Else
                Set src = Union(.Columns("A"), i, .Columns("BG"), .Columns("BH"))
            End If
        End With
   
        Set wkbk2 = Workbooks.Add
        With wkbk2.Sheets("Sheet1")
            .Name = "Test"
            src.Copy Destination:=.Range("A1")
            .Columns("D:D").Cut
            .Columns("B:B").Insert Shift:=xlToRight
            .Columns("D:D").Cut
            .Columns("C:C").Insert Shift:=xlToRight
   
            wkbk.Range("B4:B6").Copy Destination:=.Range("B4")
            .Range("C8").Cut Destination:=.Range("C7")
            .Range("D9").Cut Destination:=.Range("D7")
            .Range("8:9").Delete Shift:=xlUp
            .Range("D8:D9").Copy Destination:=.Range("B8:C9")
       
            BankingName = .Range("D7").Value
            BankingCode = Application.VLookup(BankingName, QueryRange, 2, False)
              
            .Columns.AutoFit
            .Cells(1, 1).Select
            .Parent.SaveAs Filename:="D:" & BankingCode & "_Customer.xlsx", FileFormat:=51
            .Parent.Close True
        End With

    Set src = nothing

   Next i
    Set QueryRange = Nothing
    wkbk3.Close SaveChanges:=False
    Set wkbk3 = Nothing
    wkbk.Close SaveChanges:=False
    Set wkbk = Nothing
    Application.DisplayAlerts = True
End Sub

Edit: there were some copy and paste problems. I believe I've corrected them now.

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote