如何将一个单元格或单元格范围从一个Excel电子表格复制到另一个VS 2008 VB的Excel电子表格

我在VS 2008 VB中创build了一个GUI(简单部分),它有两个文本框(一个用于select目标Excel文件,另一个用于select目标Excel文件)。 他们都伴随着一个浏览button(使用OpenDialog浏览文件select – 只读)。 此外,我还有两个文本框,我已经resize以容纳行/列和列(如果用户想要复制单元格1-6和列A-D,他们只需input1-6在第一个文本框中,AD在第二个文本框中)。 最后,我在GUI底部有一个复制button,一旦所有字段都有相关的数据,就按下复制button,复制选中的单元。 我很困惑如何复制单元格或一系列单元格,通过提示用户input一个数字和一列,以及如何真正实现复制单元格的逻辑。 我见过一些例子,但是我还没有成功地将它们应用到我的特定应用程序中。 任何帮助表示赞赏…谢谢!

VS 2008 VB代码:

Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged End Sub Private Sub OpenFileDialog1_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles OpenFileDialog1.FileOk Dim strm As System.IO.Stream strm = OpenFileDialog1.OpenFile() TextBox1.Text = OpenFileDialog1.FileName.ToString() If Not (strm Is Nothing) Then strm.Close() End If End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim selectedFile As String = String.Empty If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then selectedFile = OpenFileDialog1.FileName End If End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim selectedFile As String = String.Empty If OpenFileDialog2.ShowDialog = Windows.Forms.DialogResult.OK Then selectedFile = OpenFileDialog2.FileName End If End Sub Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged End Sub Private Sub OpenFileDialog2_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles OpenFileDialog2.FileOk Dim strm As System.IO.Stream strm = OpenFileDialog2.OpenFile() TextBox2.Text = OpenFileDialog2.FileName.ToString() If Not (strm Is Nothing) Then strm.Close() End If End Sub Private Sub CopyButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Copy_Btn.Click End Sub End Class 

如果我理解正确,那么您最关心的是如何获取行范围input(例如“1-5”)和列范围input(例如“AC”),并将这些input定义的范围复制到另一个工作簿?)。 我把一些VBA放在一起来展示如何做到这一点。 我没有花时间来build立error handling或inputvalidation,但是对于格式正确的input,这种方法是可行的。 请注意,我已将此示例代码设置为从活动工作簿的工作表1复制并粘贴到活动工作簿的工作表2中。

 Sub promptncopy() Dim rowStr As String, colStr As String, tmpAdd As String Dim hypr As Integer, hypc As Integer Dim sIn As Worksheet, sOut As Worksheet Dim rIn As Range, rOut As Range 'Input boxes for row and column ranges. It sounds like you already have some code like this. rowStr = InputBox("Enter row numbers you want to copy as range (eg 1-5).", "Enter Rows") If rowStr = "" Then Exit Sub End If colStr = InputBox("Enter column letters you want to copy as range (eg AE).", "Enter Columns") If colStr = "" Then Exit Sub End If 'Records position of hyphen in input strings. hypr = InStr(rowStr, "-") hypc = InStr(colStr, "-") 'Combines colStr and rowStr to form appropriate address for input range. 'Handles cases where colStr and/or rowStr are single values rather than ranges. If hypc <> 0 Then If hypr <> 0 Then tmpAdd = Left(colStr, hypc - 1) & Left(rowStr, hypr - 1) & ":" & Right(colStr, Len(colStr) - hypc) & Right(rowStr, Len(rowStr) - hypr) Else tmpAdd = Left(colStr, hypc - 1) & rowStr & ":" & Right(colStr, Len(colStr) - hypc) & rowStr End If Else If hypr <> 0 Then tmpAdd = colStr & Left(rowStr, hypr - 1) & ":" & colStr & Right(rowStr, Len(rowStr) - hypr) Else tmpAdd = colStr & rowStr End If End If 'Sets In and Out sheets to first and second sheets in workbook, respectively. Set sIn = Sheets(1) Set sOut = Sheets(2) Set rIn = sIn.Range(tmpAdd) Set rOut = sOut.Range("A1").Resize(rIn.Rows.Count, rIn.Columns.Count) 'Prints values (not formulas!) from input range to output range. rOut = rIn.Value End Sub