2013-07-19 125 views
1

我是VBA的新手,虽然我已经完成了其他语言的一些编码,所以我理解了一些一般的概念。我需要为excel编写一个宏,它将工作簿中的一些数据复制到一个不连续的单个列中的一个连续的新工作簿中的单个列中。困难的部分是我需要通过用户提示选择要复制的数据,并且每个选择的大小都不相同。最后,带有单列的新工作簿将被保存为制表符分隔的文本文件。这就是我想到的,用一种通用的编码语言。复杂的复制函数Excel VBA宏

我会用斜体区分变量,“引号”来区分价值观,大胆区分编码关键词。我假设代码将从新的空工作簿运行。

CODE:

%%%初始化变量。
MoreCells = “1” %%%布尔是/否提示以后
了selectedCells = “在提示选择以后范围”
SelectedCellsMagnitude = “细胞在了selectedCells#”
DestinationStartCell = “A1”%%%单元格开始于范围被复制到

打开工作簿“要复制的工作簿”个morecells = “1”
         提示用户选择范围
         组 “选择范围”= 了selectedCells
         集“了selectedCells大小“= selectedcellsmagnitude
         拷贝了selectedCells到新的工作簿起始于细胞destinationstartcell
         设置destinationstartcell = destinationstartcell + selectedcellsmagnitude
         提示用户“是否有更多单元要复制?“
          如果 ”是“ 设置morecells = ”1“
          别的设置morecells = ”0“

保存新的工作簿为制表符分隔的值在目的地“\ new \ workbook \ destination”中命名为“newworkbookname.txt”的文本文件

:END CODE

任何帮助将不胜感激。或者,就此而言,通过excel来了解VBA是否可行。

在此先感谢!

+0

这是绝对有可能。如果您需要来自用户的额外输入,那么您还必须包含VBA用户窗体。所以代码基本上会调用用户表单,在关闭时从它获取数据,然后单独继续其快乐的方式。然而,当你说“幅度”时,我对你的意思感到困惑 – Lopsided

+0

我觉得这很有道理。按照量级,我的意思是简单选择的细胞数量。这个想法是这个信息允许循环在将下一个选择复制到新的工作簿中时从正确的单元开始(因此它不会覆盖先前复制的单元)。 – user2600805

回答

0

更改工作簿和工作表值适用的工作簿和工作表

Sub usermove() 
Dim c, Rng1 As Range 
Dim i As Integer 

i = 1 

'ask for input 
userselect: 
ThisWorkbook.Sheets("Sheet1").Activate 
Set Rng1 = Application.InputBox("Please Select Cells", Type:=8) 

'loop 
For Each c In Rng1.Cells 

    ThisWorkbook.Sheets("Sheet2").Activate 

    Cells(i, 1).Value = c.Value 

    i = i + 1 
    Next 

'Prompt for more input 
continue = MsgBox("Are there more cells to select?", vbYesNo) 
If continue = vbYes Then GoTo userselect 

'then save 

    ChDir "path" 
    ActiveWorkbook.SaveAs Filename:="path\Book1.txt", FileFormat _ 
     :=xlText, CreateBackup:=False 


End Sub 
+0

谢谢你雷朋塔!这看起来不错,我明天将在工作中对它进行测试,并让我们知道是否遇到任何问题,但是由于我对VBA有限的理解,这似乎是有道理的,我认为它会做到这一点。 – user2600805

+0

我实际上想从不同的工作簿复制,所以我想出了一种似乎可以工作的方式,但总的来说你的代码很好用,再次感谢!以下是我所做的修改:显然,我的代码太长以至于无法放入评论中: - / – user2600805