Pindahkan baris ke lembar kerja dengan nama variabel

Saya mencoba memindahkan seluruh baris dalam lembar kerja ke lembar kerja lain yang namanya akan berubah saat diulang. Jika temp1 (data di lembar Master) sama dengan temp2 (data di lembar DCM) maka ia akan membuat lembar kerja dengan nama umum, atau jika lembar kerja sudah ada, ia akan menyalin seluruh baris dari Master lembar kerja ke lembar kerja baru (atau yang sudah ada). Ini kode saya. Saya mendapatkan kesalahan "Berlangganan di luar jangkauan" pada baris ini:

ActiveWorkbook.Sheets("Master").Cells(i, 1).EntireRow.Copy _
                        Destination:=Worksheets(" & temp2 & ").Range("A" & Rows.Count).End(xlUp).Offset(1)

Private Sub AddtoWorksheet()
Dim temp1 As String
Dim temp2 As String
Dim i As Integer
Dim x As Integer
Dim RowsUsed As Long
Dim RowsUsed2 As Long

 RowsUsed = ActiveWorkbook.Sheets("Master").UsedRange.Rows.Count
 RowsUsed2 = ActiveWorkbook.Sheets("DCM").UsedRange.Rows.Count

 For i = 2 To RowsUsed
    temp1 = ActiveWorkbook.Sheets("Master").Cells(i, 1).Value
        For x = 1 To RowsUsed2
            temp2 = ActiveWorkbook.Sheets("DCM").Cells(x, 1).Value
            If temp1 = temp2 Then
            AddSheetIfMissing (ActiveWorkbook.Sheets("DCM").Cells(i, 1).Value)
            ActiveWorkbook.Sheets("Master").Cells(i, 1).EntireRow.Copy _
                        Destination:=Worksheets(" & temp2 & ").Range("A" & Rows.Count).End(xlUp).Offset(1)
            Else:
            End If
            Next x

        Next i
End Sub

Function AddSheetIfMissing(Name As String) As Worksheet

    On Error Resume Next
    Set AddSheetIfMissing = ThisWorkbook.Worksheets(Name)
    If AddSheetIfMissing Is Nothing Then
        Set AddSheetIfMissing = ThisWorkbook.Worksheets.Add
        AddSheetIfMissing.Name = Name
    End If

End Function

person Tara Travino    schedule 30.12.2014    source sumber
comment
Coba Destination:=Worksheets(temp2).Range(....   -  person    schedule 31.12.2014
comment
Saya melihat banyak ActiveWorkbook di sana. Apakah Anda menggunakan lebih dari satu buku kerja? Atau semua lembarannya ada dalam satu buku?   -  person peege    schedule 31.12.2014


Jawaban (1)


Lihatlah solusi ini. Ini mengatasi beberapa masalah dan mungkin menyederhanakan apa yang Anda coba lakukan, atau setidaknya memberi Anda beberapa ide tentang cara baru untuk melakukan pendekatan ini.

Beberapa catatan:

  • Anda harus menggunakan Long, bukan Integer untuk loop Anda.

  • Jika semua lembar ada di buku kerja yang sama, Anda tidak perlu mendeklarasikan "ActiveWorkbook.Sheets"

  • Anda mencoba menggabungkan string variabel dengan tidak ada yang lain di dalam definisi tujuan Anda. '( & suhu2 & )'. Anda hanya perlu melakukan itu saat membuat string, tetapi karena temp1, dan temp2 keduanya sudah berupa string, dan dalam bentuk variabel, Anda tidak perlu melakukan itu. Selain itu, nilainya sama pada saat itu JIKA digunakan, jadi keduanya akan berfungsi di baris itu.

  • Anda tidak perlu menyertakan pernyataan Else jika Anda tidak ingin menulisnya.

  • Baris di bawah mengacu pada baris i, tetapi DCM saat itu tidak ada di baris i, melainkan di baris x, Anda akan mengambil nama sheet yang salah. Anda baru saja mencocokkan Master(i) dengan DCM(x) dan menggunakan nilai DCM(i) yang ada di tempat lain pada lembar, tidak ditangani. Lebih jauh lagi, karena Anda sebenarnya hanya meneruskan suatu nilai, bukankah Anda mencoba meneruskan temp1/temp2 yang sudah memiliki nilai itu?

referensi di atas:

AddSheetIfMissing (ActiveWorkbook.Sheets("DCM").Cells(i, 1).Value)
  • Anda dapat mengatur nilai dengan perulangan melalui kolom alih-alih menyalin baris, yang membantu menghindari pernyataan pemilihan. Ini hanyalah cara lain untuk melakukannya. Ini adalah cara pilihan saya untuk menyalin baris, memberi saya kontrol lebih besar untuk melewati nilai tertentu jika perlu.

Contoh loop untuk menyalin seluruh baris dari satu lembar ke lembar lainnya.

For lCol = 1 to lastCol
    Sheets(sheet2).Cells(tRow, lCol) = Sheets(sheet1).Cells(lRow, lCol)
Next lCol

Pertimbangkan solusi ini:

Private Sub AddtoWorksheet()
Dim temp1 As String, temp2 As String
Dim i As Long, x As Long, tRow As Long
Dim lastRow1 As Long, lastRow2 As Long, lastCol As Long
Dim Sheet1 As String, Sheet2 As String, tempSheet As String
Dim isNew As Boolean

'Define your sheet names
Sheet1 = "Master"
Sheet2 = "DCM"

'Get last row for each sheet
lastRow1 = Sheets(Sheet1).Range("A" & Rows.count).End(xlUp).row
lastRow2 = Sheets(Sheet2).Range("A" & Rows.count).End(xlUp).row

For i = 2 To lastRow1
    temp1 = Sheets(Sheet1).Cells(i, 1).Value
    For x = 1 To lastRow2
        temp2 = Sheets(Sheet2).Cells(x, 1).Value
        If temp1 = temp2 Then

'           AddSheetIfMissing (ActiveWorkbook.Sheets("DCM").Cells(i, 1).Value)
            isNew = AddSheetIfMissing(temp1)

            'Grab the last column number from Master sheet
            lastCol = Sheets(Sheet1).Cells(1, Columns.count).End(xlToLeft).column

            'Set the row on the new sheet
            If isNew = True Then
                tRow = 1
            Else
                tRow = Sheets(temp1).Range("A" & Rows.count).End(xlUp).row + 1
            End If

'           ActiveWorkbook.Sheets("Master").Cells(i, 1).EntireRow.Copy _
'               Destination:=Worksheets(" & temp2 & ").Range("A" & Rows.count).End(xlUp).Offset(1)
            For lCol = 1 To lastCol
                Sheets(temp1).Cells(tRow, lCol).Value = Sheets(Sheet1).Cells(i, lCol).Value
            Next lCol
        End If
    Next x
Next i

End Sub

Fungsi mengembalikan pengujian boolean yang menghasilkan True jika sheetnya Baru. Salah jika tidak.

Function AddSheetIfMissing(tempName As String) As Boolean
Dim ws As Worksheet
Dim isNew As Boolean
isNew = False
    On Error Resume Next
    Set ws = ThisWorkbook.Worksheets(tempName)
    If ws Is Nothing Then
        Set ws = ThisWorkbook.Worksheets.Add
        ws.name = tempName
        isNew = True
    End If
AddSheetIfMissing = isNew
End Function

Fungsi yang Anda atur untuk mengembalikan Lembar Kerja, namun pada kode asli Anda, Anda tidak memiliki apa pun yang benar-benar mengambil variabel itu, jadi itu tidak diperlukan. Saya memintanya mengembalikan tes untuk melihat apakah lembar itu baru atau tidak, untuk membantu menentukan baris di mana data perlu dipindahkan.

Lihat tautan ini yang menjelaskan dengan lebih baik perbedaan antara sub dan fungsi.< br> Ringkasan sederhananya adalah keduanya MELAKUKAN sesuatu, tetapi Fungsi MENGEMBALIKAN sebuah nilai.

person peege    schedule 30.12.2014