所以我有一位客户要我编写一些代码,以多种方式从另一个电子表格中更新他们的电子表格。
我这样做没有问题,除了他们想要更新名称的工作簿工作表随日期变化。
作为示例,工作表将被命名为
星期一“Hello World 6.13” 今天“Hello World 6.17”
所以我的问题是,我可以用“Hello World”编写寻找启动的工作表名称的代码吗?忽略日期代码?
答案 0 :(得分:2)
我会这样做,这将是循环活动工作簿中的工作表并进行比较,当找到正确的工作表“Hello World x.xx”时将其设置为参考,并使用此参考运行任何进一步的代码。
For Each ws In ActiveWorkbook.Sheets
If Left(ws.Name, 11) = "Hello World" Then
Set hwSheet = ws
End If
Next ws
With hwSheet
'do some code eg:
.Range("A1").Value = "Hi"
End With
答案 1 :(得分:1)
下面发布的是Oliver代码的一个版本,它解决了在循环中使用找到的工作表的问题,而不是最后找到的匹配。
其他一些小调整
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace CBR
{
public partial class mainFrm : Form
{
public mainFrm()
{
InitializeComponent();
}
private void mainFrm_Load(object sender, EventArgs e)
{
}
private void clipboardUpdater_Tick(object sender, EventArgs e)
{
richTextBox1.Text = Clipboard.GetText();
}
}
}
的字符串版本比变体Left$
Left
)码
ws
在没有循环的情况下返回所有部分工作表匹配的另一个选项是Adding Sheet Names to Array in Excel VBA
答案 2 :(得分:0)
这应该足够了:
Sub CallTheRealThing()
Call SelectSheets("Sheet")
End Sub
Sub SelectSheets(NameNeededinSheet As String, Optional Looked_Workbook As Workbook)
Dim WorkSheetProject As Worksheet
If Looked_Workbook Is Nothing Then Set Looked_Workbook = ThisWorkbook
For Each WorkSheetProject In Looked_Workbook.Worksheets
If InStr(WorkSheetProject.Name, NameNeededinSheet) Then: WorkSheetProject.Select: Exit Sub
Next WorkSheetProject
End Sub
您可以将其更改为Function而不是sub,以了解它是否可以选择工作表
答案 3 :(得分:0)
因此,您要捕获的电子表格在同一工作簿中始终是同一个工作表吗?如果我已经做到了这一点,您可以在客户端的工作簿中使用工作表的代号,例如Sheet1
而不是工作表名称。
Dim wb As Workbook, ws as Worksheet
Set wb = Workbooks("Client.xls")
wb.Activate
Set ws = Sheet1
在使用工作表代码之前,您必须激活相应的工作簿。为了确保这一点有效,将客户端的代码表更改为独特的(如果它已经不存在)是明智的。
答案 4 :(得分:0)
虽然我喜欢@Carrosives答案(https://stackoverflow.com/a/37882970/5079799)。我决定对其进行功能化。在这方面,我不想使用LEFT
或RIGHT
而是InSTR
。
这就是我得到的:
Public Function FindWorksheet(PartOfWSName As String) As Worksheet
For Each ws In ActiveWorkbook.Sheets
If InStr(ws.Name, PartOfWSName) > 0 Then
Debug.Print ws.Name
Set FindWorksheet = ws
Exit For
End If
Next ws
End Function
Sub TestingSpot_Sub()
Dim PartOfWSName As String
PartOfWSName = "Testz"
Dim ws As Worksheet
Set ws = FindWorksheet(PartOfWSName)
ws.Activate
End Sub