2013-06-05 66 views
0

我正在清理Excel電子表格中的聯繫人數據,以批量上傳到SalesForce中。然而,SalesForce只能管理長達100個聯繫人的工作表。我想要一個可以將700行工作表分成7個工作簿的宏,每個工作簿包含100個單元格引用。VBA宏將一個工作表分成幾個工作簿,基於工作表中的行數

我做了如何去這樣做了一些研究,我相信這是在計算器上唯一的參考爲此,以幫助: Solution for Dividing WorkSheet into Multiple Files with vba/excel/c#

此外,該解決方案看起來很有希望,但我不瞭解足夠的VBA以便掌握它:https://superuser.com/questions/57157/can-i-split-a-spreadsheet-into-multiple-files-based-on-a-column-in-excel-2007

但是,選定的答案並不真正服務於我的目的。有人能指出我正確的方向/列舉這樣做的命令嗎?

以下是我到目前爲止 - 這似乎產生正確數量的工作簿。現在我只需要弄清楚如何在每一行中剪切和粘貼100行。

Sub Macro12() 

    Dim wb As Workbook 
    Dim p As Double 
    Dim p_quotient As Double 
    Application.ScreenUpdating = False 

    p = ActiveSheet.UsedRange.Rows.Count 
    p_quotient = p/100 
    p_quotient = Application.WorksheetFunction.RoundUp(p_quotient, 0) 

    For i = 1 To p_quotient 
     Workbooks.Add 
     Set wb = ActiveWorkbook 
     ThisWorkbook.Activate 
     wb.SaveAs ThisWorkbook.Path & "test" & i 
     wb.Close 

    Next i 
    Application.ScreenUpdating = True 
    Set wb = Nothing 


End Sub 

這是我現在使用的代碼:

Sub Macro12() 

    Dim wb As Workbook 
     Dim ThisSheet As Worksheet 
     Dim NumOfColumns As Integer 
     Dim RangeToCopy As Range 
     Dim WorkbookCounter As Integer 
     Dim myDate As String 
     myDate = Format(Date, "yyyy.mm.dd") 

     Set ThisSheet = ThisWorkbook.ActiveSheet 
     NumOfColumns = ThisSheet.UsedRange.Columns.Count 
     WorkbookCounter = 1 


     For p = 1 To ThisSheet.UsedRange.Rows.Count Step 101 
     Set wb = Workbooks.Add 

     Set RangeToCopy = ThisSheet.Range(ThisSheet.Cells(p, 1), ThisSheet.Cells(p + 100, NumOfColumns)) 
     RangeToCopy.Copy wb.Sheets(1).Range("A1") 

     wb.SaveAs ThisWorkbook.Path & "\Salesforce Lead Conversion " & myDate & " Part " & WorkbookCounter & ".xls" 
     wb.Close 
     WorkbookCounter = WorkbookCounter + 1 
     Next p 

     Application.ScreenUpdating = True 
     Set wb = Nothing 

    End Sub 
+0

什麼是你的代碼迄今使用? – enderland

回答

2

按照你的邏輯,這應該這樣做:

Sub Macro12() 

     Dim wb As Workbook 
     Dim ThisSheet As Worksheet 
     Dim NumOfColumns As Integer 
     Dim RangeToCopy As Range 
     Dim WorkbookCounter As Integer 

     Application.ScreenUpdating = False 


     Set ThisSheet = ThisWorkbook.ActiveSheet 
     NumOfColumns = ThisSheet.UsedRange.Columns.Count 
     WorkbookCounter = 1 

     For p = 1 To ThisSheet.UsedRange.Rows.Count Step 101 
     Set wb = Workbooks.Add 

     Set RangeToCopy = ThisSheet.Range(ThisSheet.Cells(p, 1), ThisSheet.Cells(p + 100, NumOfColumns)) 
     RangeToCopy.Copy wb.Sheets(1).Range("A1") 

     wb.SaveAs ThisWorkbook.Path & "\test" & WorkbookCounter 
     wb.Close 
     WorkbookCounter = WorkbookCounter + 1 
     Next p 

     Application.ScreenUpdating = True 
     Set wb = Nothing 


    End Sub 
+0

這個效果很好!不幸的是,我有兩個問題。 1.該程序生成五個新的電子表格,而不管程序中使用的行數 - 這是爲什麼? 2.我已將Workbook SaveAs修改爲如下所示:wb.SaveAs ThisWorkbook.Path&「\ Salesforce Lead Conversion」&myDate&「Part」&WorkbookCounter&「.xls」 - 現在,該文件表示它已損壞。有任何想法嗎? – Parseltongue

+0

你能發佈你現在使用的確切代碼嗎?我測試了我給你的代碼,當我有725行時,它產生了8個工作簿。至於#2,它**可能是myDate格式化爲「\」字符...你不能這樣做的文件名。但是,這只是一個快速猜測 –

+0

我發現問題是這個代碼:ThisSheet.UsedRange.Rows.Count,對我來說產生435,即使該行沒有被使用。試圖找到替代品。聰明的想法與myDate格式 – Parseltongue

0

雖然有很多方法可以做到這一點(有些甚至非常容易使用VBA)我覺得會是什麼,不需要VBA的最簡單將做到以下幾點:

  • 添加一個額外的「幫手」列
  • 在此列,把下面的公式在0
  • 上的數據

做一個過濾器現在,過濾器放在你的助手列每個號碼0,1,2,3,...,7。

每組將有您的下一百條記錄 - 複製並粘貼到一個新的工作簿,並根據需要進行保存。另外,從這一點來看,真正的情況是記錄一個快速的宏來做最後一部分。

儘管它不完全符合您的要求,但我希望它的簡單性有所幫助。

+0

這有幫助,但我正在爲一家公司開發一個宏工具箱,並且希望它是自動化的。 – Parseltongue

相關問題