我有以下代码
For x = LBound(arr) To UBound(arr)
sname = arr(x)
If instr(sname, "Configuration item") Then
'**(here i want to go to next x in loop and not complete the code below)**
'// other code to copy past and do various stuff
Next x
Run Code Online (Sandbox Code Playgroud)
所以我认为我可以简单地使用该语句Then Next x,但这会给出"no for statement声明"错误.
那么我可以在If instr(sname, "Configuration item") Then它进入x的下一个值之后放入什么呢?
任何人都可以给我一个VBA代码,它将从Excel工作表中获取范围(行或列)并使用唯一值填充列表/数组,即:
table
table
chair
table
stool
stool
stool
chair
Run Code Online (Sandbox Code Playgroud)
当宏运行时会创建一个类似于以下内容的数组:
fur[0]=table
fur[1]=chair
fur[2]=stool
Run Code Online (Sandbox Code Playgroud) 我有两位代码.首先是从细胞A到细胞B的标准复制糊
Sheets(sheet_).Cells(x, 1).Copy Destination:=Sheets("Output").Cells(startrow, 2)
Run Code Online (Sandbox Code Playgroud)
我可以做几乎相同的使用
Sheets("Output").Cells(startrow, 2) = Sheets(sheet_).Cells(x, 1)
Run Code Online (Sandbox Code Playgroud)
现在第二种方法要快得多,避免复制到剪贴板并再次粘贴.但是,它不会像第一种方法那样复制格式.第二个版本几乎可以立即复制500行,而第一个版本增加了大约5秒的时间.最终版本可能超过5000个单元格.
所以我的问题是第二行可以改为包括单元格格式(主要是字体颜色),同时仍然保持快速.
理想情况下,我希望能够将单元格值与字体格式一起复制到数组/列表中,这样我就可以对它们进行进一步的排序和操作,然后再将它们"粘贴"到工作表上.
所以我的理想解决方案就是这样
for x = 0 to 5000
array(x) = Sheets(sheet_).Cells(x, 1) 'including formatting
next
for x = 0 to 5000
Sheets("Output").Cells(x, 1)
next
Run Code Online (Sandbox Code Playgroud)
是否可以在VBA中使用RTF字符串,或者只能在vb.net等中使用.
答案*
只是为了看看我的origianl方法和新方法如何比较,这里是结果或之前和之后
新代码= 65毫秒
Sheets("Output").Cells(startrow, 2) = Sheets(sheet_).Cells(x, 1)
Sheets("Output").Range("B" & startrow).Font.ColorIndex = Sheets(sheet_).Range("A" & x).Font.ColorIndex 'copy font colour as well
Run Code Online (Sandbox Code Playgroud)
旧代码= 1296毫秒
'Sheets("Output").Cells(startrow, 2).Value = Sheets(sheet_).Cells(x, 1)
'Sheets(sheet_).Cells(x, 1).Copy
'Sheets("Output").Cells(startrow, 2).PasteSpecial (xlPasteFormats)
'Application.CutCopyMode = False
Run Code Online (Sandbox Code Playgroud) 我找到了这段代码,并认为如果我只需要从一个封闭的表中提取一个值,那么使用它可能会很好.
strInfoCell = "'" & strPath & "[" & strFile & "]Sheet1'!R3C3"
myvalue = ExecuteExcel4Macro(strInfoCell)
Run Code Online (Sandbox Code Playgroud)
当我运行此代码,我得到一个值strinfocell的
'C:\Users\my.name\Desktop[QOS DGL stuff.xlsx]Sheet1'!R3C3
但是当我运行代码时会弹出一个对话框,显示带有" QOS DGL suff"显示的桌面文件.
造成这种情况的原因是什么,不仅仅是按预期撤回数据?
我知道路径和文件名是正确的,因为如果我从调试输出中复制它们并将它们粘贴到start>>run那么打开正确的工作表.
我知道Sheet1(名为:) ACL,确实有价值cells(3,3)
我的 terraform 文件中有一个模块,该模块创建了一些执行一些操作的数据库服务器。
首先,它创建一个自动缩放组以使用特定图像,然后创建一些 EBS 卷并附加它们,然后添加一些 lambda 代码,以便在启动实例时注册到路由 53。所以总共有大约 80 行文本。
提炼
module "systemt-sql-db01" {
source = "localmodules/tf-aws-asg"
name = "${var.envname}-sys-db01"
envname = "${var.envname}"
service = "dbpx"
ami_id = "${data.aws_ami.app_sqlproxy.id}"
user_data = "${data.template_cloudinit_config.config-enforcement-sqlproxy.rendered}"
#subnets = ["${module.subnets-enforcement.web_private_subnets}"]
subnets = ["${element(module.subnets-enforcement.web_private_subnets, 1)}"]
security_groups = ["${aws_security_group.unfiltered-egress-sg.id}", "${aws_security_group.sysopssg.id}", "${aws_security_group.system-sqlproxy.id}"]
key_name = "${var.keypair}"
load_balancers = ["${var.envname}-enf-dbpx-int-elb"]
iam_instance_profile = "${module.iam_profile_generic.profile_arn}"
instance_type = "${var.enforcement_instancesize_dbpx}"
min = 0
max = 0
}
Run Code Online (Sandbox Code Playgroud)
然后我有两个参数文件,一个在启动预生产时调用,另一个在启动生产时调用。我不希望这些包含变量以外的任何内容。
问题是对于生产我需要调用模块两次,但对于生产我需要调用它三次。
人们谈论模块的计数功能,但我认为目前还不可能。任何人都可以建议任何其他方法来做到这一点?我想要的是能够在我的参数文件中设置所有 DB ASG 名称的列表变量,然后每次循环调用该模块。
我希望这是有道理的?
谢谢你
在下面的代码中,文件名是硬编码的,但我希望用户能够选择它.
我正在阅读GetSaveAsFilename但是在使用它时出现错误:"找不到方法或成员".
fileSaveName = Application.GetSaveAsFilename _
(fileFilter:="Excel Files (*.txt), *.txt")
Run Code Online (Sandbox Code Playgroud)
这是为Word 2010编写的.我GetSaveAsFilename在VBA这个词中有错误吗?
Sub Macro3()
'
' Macro3 Macro
'
'
ActiveDocument.SaveAs2 FileName:="Questionnaire01-05-20122.txt", _
FileFormat:=wdFormatText, LockComments:=False, Password:="", _
AddToRecentFiles:=True, WritePassword:="", ReadOnlyRecommended:=False, _
EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, SaveFormsData _
:=True, SaveAsAOCELetter:=False, Encoding:=1252, InsertLineBreaks:=False, _
AllowSubstitutions:=False, LineEnding:=wdCRLF, CompatibilityMode:=0
End Sub
Run Code Online (Sandbox Code Playgroud) 首先让我首先感谢大家加入本网站,我已经从中获得了很多有用的信息.包括一些基本的文本文件解析到数组,但我现在想更进一步.
我有一个看起来像这样的文本文件
Start Section 1 - foods
apple
bannana
pear
pineapple
orange
end section 1
Start section 2 - animals
dog
cat
horse
cow
end section 2
Run Code Online (Sandbox Code Playgroud)
我想要做的是使用文件的单个读取将第1部分中的数据复制到名为"foods"的数组中,将第2部分复制到名为"animals"的数组中
现在我可以通过为每个部分使用一个新循环,每次关闭并重新打开文件,循环直到找到我想要的部分并创建数组来使其工作.
但我当时认为必须有一种方法可以一次性将每个部分读入一个单独的数组中.
所以我目前的代码是
List<string> typel = new List<string>();
using (StreamReader reader = new StreamReader("types.txt")) // opens file using streamreader
{
string line; // reads line by line in to varible "line"
while ((line = reader.ReadLine()) != null) // loops untill it reaches an empty line
{
typel.Add(line); // adds the line to …Run Code Online (Sandbox Code Playgroud) 是否可以在单个匹配中从数据网格中删除所有列?
我知道我可以循环并逐个删除它们,或删除整个事物并创建它.
但是可以简单地清除列并将网格留在原位,以便用户可以重新开始.即把它恢复到原来的状态.
好的,这是我的代码
private void PopulateGrid()
{
UserVGrid.AutoGenerateColumns = false;
UserVGrid.Columns.Clear();
List<string> _values = populate.GetVaribles;
foreach (var line in _values)
{
if (!line.Contains("Startind"))
{
string[] newline = line.Split('=');
DataGridViewColumn newColumn = new DataGridViewTextBoxColumn();
newColumn.Name = newline[0];
newColumn.HeaderText = newline[1];
newColumn.ToolTipText = newline[2];
UserVGrid.Columns.Add(newColumn);
}
}
Run Code Online (Sandbox Code Playgroud)
所以我们假设_values有apple,pear作为值
运行此方法一次,我得到一个数据网格,其中包含两个名为apple和pear的列.
这次运行它第二次使用_values包含char,table.
我最终得到了4支苹果,梨,椅子和桌子.我想要的是它第二次运行它清除网格然后应用新的colums.
干杯
亚伦
我在Perl中有一个简单的for循环
for ($i=0; $i <= 360; $i += 0.01)
{
print "$i ";
}
Run Code Online (Sandbox Code Playgroud)
为什么当我运行这段代码时,我得到以下输出,一旦达到0.81,它突然开始加载更多的小数位?我知道我可以简单地围绕以避免这个问题,但我想知道它为什么会发生.0.01的增量似乎并不疯狂.
0.77
0.78
0.79
0.8
0.81
0.820000000000001
0.830000000000001
0.840000000000001
0.850000000000001
0.860000000000001
0.870000000000001
Run Code Online (Sandbox Code Playgroud) 我有一个模块,它采用Decimal格式的2 X 8bit数字,具有特定的结构
每个数字必须以相同的4位= 0011开始,然后是变量8位,然后是4位被忽略,因此设置为0000
所以计算16位数是很简单的
变量数*16将它向左移4位,添加12288 = 0011 | 000000000000将得到所需的结果.
所以如果我的输入数字是19例如
19 X 16 + 12288 = 12592 = 0011000100110000
下一步是将其拆分为两个X 8位数
00110001 | 00110000 = 49,48
如何在python中有效地从12592到49,48.
从来没有在脚本中使用二进制,所以有点新.
干杯