我正在整理一个办公应用程序(VBA),该应用程序调用C#控制台应用程序来执行应用程序的一些繁重工作(大型模拟程序).我希望能够让VBA应用程序等待控制台应用程序完成以及从控制台应用程序中检索退出代码.我已经能够做到前者,但还没有能够从应用程序中检索退出代码.有什么方法可以使用像
Diagnostics.Process.Start(filePath)
Run Code Online (Sandbox Code Playgroud)
我在VB中看过这个,但对VBA不确定.否则,还有其他建议吗?
我是Silverlight和XAML的新手.在尝试学习语法和最佳实践时,我继续遇到一些差异(或者至少对我而言似乎是这样),有些实现了事件处理程序.
在MSDN 的示例中,我看到使用以下代码:
<UserControl x:Class="DragAndDropSimple.Page"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="400" Height="300">
<Canvas x:Name="rootCanvas"
Width="640"
Height="480"
Background="Gray"
>
<!-- You can drag this rectangle around the canvas. -->
<Rectangle
MouseLeftButtonDown="Handle_MouseDown"
MouseMove="Handle_MouseMove"
MouseLeftButtonUp="Handle_MouseUp"
Canvas.Left="30" Canvas.Top="30" Fill="Red"
Width="50" Height="50" />
</Canvas>
</UserControl>
Run Code Online (Sandbox Code Playgroud)
但是,在设置了鼠标处理程序的地方,在其他代码中我看到了后面代码中使用的这个方法:
public Window1()
{
InitializeComponent();
TransformGroup group = new TransformGroup();
ScaleTransform xform = new ScaleTransform();
group.Children.Add(xform);
TranslateTransform tt = new TranslateTransform();
group.Children.Add(tt);
image.RenderTransform = group;
image.MouseWheel += image_MouseWheel;
image.MouseLeftButtonDown += image_MouseLeftButtonDown;
image.MouseLeftButtonUp += image_MouseLeftButtonUp;
image.MouseMove += image_MouseMove;
}
Run Code Online (Sandbox Code Playgroud)
我会假设MSDN上的示例是推荐的方式,但是,我倾向于喜欢第二种方法. …
在进行报告时,最佳方式(对用户最直观)或显示除以0错误结果的最佳实践是什么?在报告中,我在人类可读报告中显示时会捕获此错误; 我不知道该怎么说.
一个例子就是体重/收入比.对于给定的终端,在给定的一天,可能没有收入,但是一些货物(可能具有重量)可能已经被运送.
我正在查看当前的报告,通过在列中放置0来处理此问题,但是,这可能会产生误导,因为这在技术上并不正确.
另一个想法是把它留空; 但是,用户不知道该字段为空的原因.
我也考虑过标准的Excel错误,#DIV/0!但这往往会使报告看起来很混乱.
我很好奇其他人过去为这种情况所做的事情.
是否有必要使用句子通知单句?即使它被认为是正确的语法,它看起来很丑陋,感觉太正式了.
这里有两个用于比较的屏幕(第一个包括期间,第二个没有).
我创建了一个排序函数,允许基于其中一个对象属性对自定义对象的实例集合进行排序.是否可以在VBA中扩展现有的集合类?我不认为VBA支持继承,所以我不确定如何以正确的方式解决这个问题.我可以创建一个新模块并将该函数放在该模块中,但这似乎不是最好的方法.
我已经构建了一个应用程序,用于模拟公司每月可以以不同"模式"生产的产品数量.此模拟用于帮助找到最佳运行模式系列一个月,以最好地满足当月的预计销售预测.该应用程序一直运行良好,直到最近工厂被修改为以其他模式运行.现在可以以16种模式运行.对于22个工作日的一个月,这产生了9,364,199,760种可能的组合.这从过去的8种模式中提升,仅产生1,560,780种可能的组合.运行此应用程序的PC是旧的,在抛出内存不足异常之前无法处理计算次数.事实上,整个应用程序不能支持超过15种模式,因为它使用整数来跟踪模式的数量,并且它超过了整数的上限.面对这个问题,我需要尽我所能降低应用程序的内存利用率并优化它以尽可能高效地运行,即使它无法实现16种模式的既定目标.我正在考虑将数据写入磁盘而不是将列表存储在内存中,但在我承担这一开销之前,我希望得到人们对该方法的看法,看看是否有任何优化空间.
编辑 基于少数人的建议,考虑更具学术性的东西,然后只计算每个可能的答案,下面列出了如何选择最佳运行(模式组合)的简要说明.目前,计算机确定工厂可以在该月的工作日数内运行的每种可能方式.例如,3个模式最多2个工作日将导致(1,1),(1,2),(1,3),(2,2)的组合(其中数字代表所选模式), (2,3),(3,3)对于每种模式,产品以不同的生产率生产,例如在模式1中,产品x可以每小时50个单位生产,其中产品y以每小时30个单位生产,产品z以每小时0个单位产生.然后将每个组合乘以工时和生产率.选择产生与每月产品的预测值最接近匹配的数字的运行.但是,由于工厂的某些月份不符合产品的预测值,因此该算法会提高下个月产品的优先级,以确保产品在年底达到预测值.由于仓库空间紧张,重要的是产品不要过多生产.
谢谢
private List<List<int>> _modeIterations = new List<List<int>>();
private void CalculateCombinations(int modes, int workDays, string combinationValues)
{
List<int> _tempList = new List<int>();
if (modes == 1)
{
combinationValues += Convert.ToString(workDays);
string[] _combinations = combinationValues.Split(',');
foreach (string _number in _combinations)
{
_tempList.Add(Convert.ToInt32(_number));
}
_modeIterations.Add(_tempList);
}
else
{
for (int i = workDays + 1; --i >= 0; )
{
CalculateCombinations(modes - 1, workDays - i, combinationValues + i + ",");
}
}
}
Run Code Online (Sandbox Code Playgroud) 我正在创建一个预测应用程序,它将运行生产工厂能够运行的各种"模式"的模拟.工厂可以每天以一种模式运行,因此我正在编写一个功能,将每天选择的不同模式相加,以最大限度地提高工厂的产量,并最好地与所提供的销售预测数量保持一致.此数据将加载到模式对象数组中,然后用于计算工厂的预测输出.
我已经创建了执行此操作的函数,但是,我需要使它们递归,以便我能够处理任何数量(在合理范围内)的模式和工作日(根据生产需要而变化).下面列出的是我的代码,使用for循环来模拟我想要做的事情.有人能指出我正确的方向,以创建一个递归函数来取代多个for循环的需要吗?
方法GetNumbers4将在有四种模式时,GetNumbers5将是5种模式.Int start将是工作日数.
private static void GetNumber4(int start)
{
int count = 0;
int count1 = 0;
for (int i = 0; 0 <= start; i++)
{
for (int j = 0; j <= i; j++)
{
for (int k = 0; k <= j; k++)
{
count++;
for (int l = 0; l <= i; l++)
{
count1 = l;
}
Console.WriteLine(start + " " + (count1 - j) + " " + (j - k) + " …Run Code Online (Sandbox Code Playgroud) 对于我正在编写的VBA应用程序,我需要将相同的数据写入两个不同的单元格区域.我当然可以循环两次并写入数据,但我希望能够一次性完成.
这是我正在做的一个例子(删除了很多复杂性).
Sub WriteData()
WriteOutDivision "Division1",10
WriteOutDivision "Division1",20
End Sub
Private Sub WriteOutDivision(ByVal divisionName, ByVal rowNumber)
Dim curSheet As Worksheet
Set curSheet = Sheets("Company Scorecard")
With curSheet.Cells(rowNumber, 1)
.value = divisionName
.Font.Bold = True
.InsertIndent 1
End With
End Sub
Run Code Online (Sandbox Code Playgroud)
有什么办法可以同时写入第10行第1列和第20行第1列吗?
我正在寻找帮助,以确定我正在建立的班级模型是否可以改进.我正在构建的类是一个带有一些属性的简单Product类.
class clsProducts
{
private string _name;
private double _productionRate;
//Constructor
public clsProducts()
{
_name = "null";
_productionRate = 0.0;
}
public clsProducts(string name, double productionRate)
{
_name = name;
_productionRate = productionRate;
}
//Properties
public string Name
{
get { return _name; }
}
public double ProductionRate
{
get { return _productionRate; }
}
}
Run Code Online (Sandbox Code Playgroud)
我想补充的是能够为每个产品提供每月预测值.我可以添加以下内容来执行此操作
private double _janValue;
private double _febValue;
Run Code Online (Sandbox Code Playgroud)
等等,但这看起来很混乱.我还考虑创建一个名为ForecastValues的嵌套类,例如
class clsProducts
{
...code here....
protected class ForecastValues
{
private string name;
private double forecastValue;
...other …Run Code Online (Sandbox Code Playgroud) c# ×4
vba ×3
optimization ×2
.net ×1
collections ×1
excel ×1
grammar ×1
model ×1
punctuation ×1
recursion ×1
reporting ×1
shell ×1
silverlight ×1
xaml ×1