我知道你可以轻松地获取一系列单元格并将它们打成Variant数组,但我想使用字符串数组(因为它是单维的,占用的内存比Variant数组少).
有没有办法自动将范围转换为字符串数组?
现在我正在使用一个函数来获取范围并将值保存在变量数组中,然后将变量数组转换为字符串数组.它工作得很好,但我正在寻找一种直接从范围到字符串数组的方法.任何帮助将不胜感激.
Function RangeToArray(ByVal my_range As Range) As String()
Dim vArray As Variant
Dim sArray() As String
Dim i As Long
vArray = my_range.Value
ReDim sArray(1 To UBound(vArray))
For i = 1 To UBound(vArray)
sArray(i) = vArray(i, 1)
Next
RangeToArray = sArray()
End Function
Run Code Online (Sandbox Code Playgroud)
更新:在将数据转换为一维字符串数组之前,看起来没有办法跳过将数据抛入变量数组的步骤.如果它是真的是一种耻辱(即使它不需要太多努力,我喜欢超优化,所以我希望有一种方法可以跳过这一步).如果没有解决方案,我会在几天内结束这个问题.谢谢你的帮助,伙计们!
更新2:答案是西蒙,他付出了很大的努力(其他人也是如此),并且完全指出,一次性从阵列到阵列阵列确实是不可能的.感谢大家.
什么被认为是最准确的基准VBA代码的方法(在我的情况下,我在Excel中测试代码)?除了下面的2之外,还有其他任何基准代码的技术吗?如果有的话,该方法的优点/缺点是什么?
这是两种流行的方法.
第一:计时器
Sub TimerBenchmark()
Dim benchmark As Double
benchmark = Timer
'Do your code here
MsgBox Timer - benchmark
End Sub
Run Code Online (Sandbox Code Playgroud)
和Tick(我认为这是最准确的):
Option Explicit
Private Declare Function GetTickCount Lib "kernel32" () As Long
Sub TickBenchmark()
Dim Start As Long
Dim Finish As Long
Start = GetTickCount()
'Do your code here
Finish = GetTickCount()
MsgBox CStr((Finish - Start) / 1000)
End Sub
Run Code Online (Sandbox Code Playgroud) 假设我正在创建一个具有名称和日期的类对象的实例.设置日期时哪个被认为是最佳做法?
var employees = new List<Employee>()
{
new Employee {Name = "Foo", HireDate = new DateTime(2000, 1, 15)},
new Employee {Name = "Bar", HireDate = new DateTime(2001, 5, 25)},
};
Run Code Online (Sandbox Code Playgroud)
要么
var employees = new List<Employee>()
{
new Employee {Name = "Foo", HireDate = DateTime.Parse("2000, 1, 15")},
new Employee {Name = "Bar", HireDate = DateTime.Parse("2001, 5, 25")},
};
Run Code Online (Sandbox Code Playgroud)
我假设确实没有太大的区别,但我对C#稍微有点新意,所以我不确定哪个是大多数C#程序员以及为什么(性能,可读性等).提前感谢您提供的任何见解!
我需要定期刷新我的Linq To SQL类; 是的,因为我没有彻底考虑我的数据架构,糟糕的开发人员,令人讨厌,我感到很遗憾.我发现SQLMetal几乎可以解决问题,但也许我从参数列表中遗漏了一些东西.
当我使用Visual Studio外部工具从我闪亮的新工具栏按钮运行我的批处理文件时,
@echo off
del c:\path\to\LinqToSql.dbml
SQLMetal.exe /server:SERVER\SQLSERVER /database:db /timeout:0 /dbml:"c:\path\to\LinqToSql.dbml" /namespace:DAL /context:DataDataContext /entitybase:System.Data.Linq.DataContext /language:csharp /pluralize
Run Code Online (Sandbox Code Playgroud)
SqlMetal生成.dbml文件,万岁.但是,问题1可以通过编程方式将.dbml文件包含到我的项目中吗?
问题2
为什么,当我手动包含新生成的.dbml文件后编译时,我的每个类都有与其无参数构造函数的行号相关的以下构建错误?例如30个表= 30个构建错误.
'System.Data.Linq.DataContext' does not contain a constructor that takes 0 arguments
Run Code Online (Sandbox Code Playgroud)
实际上
我注意到我DataDataContext生成的类没有无参数构造函数,所以我添加了一个部分类来补充,但它仍然不能解决问题.
public partial class DataDataContext
{
public DataDataContext() :
base(global::DAL.Properties.Settings.Default.MyConnectionString, mappingSource)
{
OnCreated();
}
}
Run Code Online (Sandbox Code Playgroud)
我认为这个刷新过程可以自动化,但手动添加生成这些构造函数错误的生成的.dbml文件对我来说不起作用.
我有一个宏,可以循环创建17个工作簿.当它在一个工作簿上完成时,它关闭它并进入下一个:
ActiveWorkbook.Save
ActiveWindow.Close
Run Code Online (Sandbox Code Playgroud)
直到最近,这一直很好.突然循环nr.7它说(6个循环仍然工作正常):
运行时间'-2147417848(80010108)':
方法'关闭'objekt'窗口'失败
我可以删除"ActiveWindow.Close"并手动关闭所有工作簿以使宏工作.但还是......
谁知道为什么这样做?
excel ×3
vba ×3
c# ×2
.net ×1
arrays ×1
benchmarking ×1
datetime ×1
linq-to-sql ×1
optimization ×1
range ×1
sqlmetal ×1
string ×1